package demo1;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author liangzai
 * @Description:
 */
public class Training {
    public int similarPairs(String[] words) {
        int len = words.length;
        int[][] nums = new int[len][26];
        for(int i=0; i<len; i++){
            int slen = words[i].length();
            for(int j=0; j<slen; j++){
                nums[i][words[i].charAt(j)-'a'] = 1;  // 记录每个单词包含的字母，有则为 1
            }
        }

        int ans = 0;
        for(int i=0; i<len-1; i++){
            for(int j=i+1; j<len; j++){
                if(Arrays.equals(nums[i],nums[j])){  // 数组比较，相同就是一对相似字符串
                    ans+=1;
                }
            }
        }
        return ans;
    }

    public long wonderfulSubstrings(String word) {
        int n = word.length();
        long ans = 0;
        int[] prefix = new int[n+1];
        for(int i = 0; i < n; i++){
            int bit = 1 << (word.charAt(i)-'a');
            prefix[i+1] = prefix[i] ^ bit;
        }
        Map<Integer,Integer> map = new HashMap<>();
        map.put(0,1);
        for(int i = 1; i <= n; i++){
            int preSum = prefix[i];
            for(int j = 0; j < 10; j++){
                int bit = 1 << j;
                if(map.containsKey(preSum^bit)){
                    ans += map.get(preSum^bit);
                }
            }
            if(map.containsKey(preSum)){
                ans += map.get(preSum);
            }
            map.merge(preSum,1,Integer::sum);
        }
        return ans;
    }
}
